package twelfth.压缩流;

import java.io.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

/**
 * 实现的时候要列出文件夹里面的全部内容，并把每一个内容设置成ZipEntry对象，保存在压缩文件中
 */
public class 压缩文件夹 {
    public static void main(String[] args) throws IOException {
        //源文件和要压缩的文件
        File file = new File("D:\\WorkSpaces\\JavaDevelopBase_start_329\\src\\twelfth\\fakeDir");
        File zipfile = new File("D:\\WorkSpaces\\JavaDevelopBase_start_329\\src\\twelfth\\fakeDir.zip");
        //zip压缩输出流 设置comment
        ZipOutputStream zipos = new ZipOutputStream(new FileOutputStream(zipfile));
        zipos.setComment("karkitchan");
        //输入流读取
        InputStream is = null;
        //判断是否是目录 是目录就循环提取所有文件 并设置ZipEntry 然后InputStream读取返回到temp
        if (file.isDirectory()) {
            File[] lists = file.listFiles();// 列出全部文件
            for (int i = 0; i < lists.length; i++) {
                is = new FileInputStream(lists[i]);
                // 每一个压缩文件都用ZipEntry表示，需要为每一个压缩文件设置名称
                zipos.putNextEntry(new ZipEntry(file.getName() + File.separator + lists[i].getName()));
                int temp = 0;
                while ((temp = is.read()) != -1) {
                    zipos.write(temp);
                }
                is.close();// 关闭输入流
            }
        }
        zipos.close();
    }
}
